package com.imooc.bilibili.api;

import com.imooc.bilibili.domain.Danmu;
import com.imooc.bilibili.domain.JsonResponse;
import com.imooc.bilibili.service.DanmuService;
import com.imooc.bilibili.support.UserSupport;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author xiexu
 * @create 2022-07-07 17:42
 */
@RestController
public class DanmuApi {

    @Autowired
    private DanmuService danmuService;

    @Autowired
    private UserSupport userSupport;

    /**
     * 获取对应视频的在线观看人数
     *
     * @param videoId
     * @return
     */
    @GetMapping("/danmus/{videoId}")
    public JsonResponse<String> getVideoOnlineNumber(@PathVariable Long videoId) {
        String number = danmuService.getVideoOnlineNumber(videoId);
        return new JsonResponse<>(number);
    }

    /**
     * 查询弹幕
     * 在游客模式下，是没有办法进行弹幕时间段筛选的
     * 用户进行登录之后，就可以指定时间段进行弹幕查询
     *
     * @param videoId   视频id
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return
     * @throws Exception
     */
    @GetMapping("/danmus")
    public JsonResponse<List<Danmu>> getDanmus(@RequestParam Long videoId, String startTime, String endTime) throws Exception {
        List<Danmu> list;
        try {
            // 判断当前是游客模式还是用户登录模式
            userSupport.getCurrentUserId();
            // 若是用户登录模式，则允许用户进行时间段筛选
            list = danmuService.getDanmus(videoId, startTime, endTime);
        } catch (Exception ignored) {
            // 若为游客模式，则不允许用户进行时间段筛选
            list = danmuService.getDanmus(videoId, null, null);
        }
        return new JsonResponse<>(list);
    }

}
